package services

import (
	"time"

	"cashew.com/cashew_common/configs"
	"github.com/beego/beego/v2/core/logs"
)

// 根据时间戳、目标星期几和格式返回该日期对应的目标星期几 targetWeekday: 1到7
func GetWeekdayFormat(timestamp int64, targetWeekday int, format string) string {
	// 将时间戳转换为 time.Time 对象
	t := time.Unix(timestamp, 0).UTC()

	// 获取默认时区
	location, err := time.LoadLocation(configs.DefaultTimezone)
	if err != nil {
		return "" // 处理时区加载失败的情况
	}

	// 将时间转换为默认时区时间
	t = t.In(location)

	// 获取当前星期几 (Sunday = 0, Monday = 1, ..., Saturday = 6)
	currentWeekday := int(t.Weekday())
	if currentWeekday == 0 {
		currentWeekday = 7 // 将 Sunday 转为 7
	}

	// 计算偏移量，确定距离目标星期几的天数
	dayOffset := targetWeekday - currentWeekday

	// 计算该日期的目标星期几
	targetDate := t.AddDate(0, 0, dayOffset)

	// 返回格式化后的目标星期几日期
	return targetDate.Format(format)
}

// 根据时间戳和格式返回格式化后的日期字符串
func TimestampToDatetime(timestamp int64, format string) string {
	// 将时间戳转换为 time.Time 对象
	var t time.Time
	if timestamp == 0 {
		t = time.Now().UTC()
	} else {
		t = time.Unix(timestamp, 0).UTC()
	}

	// 获取默认时区
	location, err := time.LoadLocation(configs.DefaultTimezone)
	if err != nil {
		logs.Warn("时区加载失败:", err)
		return "" // 处理时区加载失败的情况
	}

	// 将时间转换为默认时区时间
	t = t.In(location)

	// 返回格式化后的字符串
	return t.Format(format)
}

func DatetimeToTimestamp(datetime string) (int64, error) {
	// 获取默认时区
	location, err := time.LoadLocation(configs.DefaultTimezone)
	if err != nil {
		return 0, err // 处理时区加载失败的情况
	}

	t, err := time.ParseInLocation("2006-01-02 15:04:05", datetime, location)
	if err != nil {
		return 0, err
	}

	return t.Unix(), nil
}
